home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / amos / amoslist-0295.lzh / AMOSLIST / text0262.txt < prev    next >
Encoding:
Text File  |  1995-03-01  |  24.1 KB  |  1,021 lines

  1. Here is the code of a fighting type game I was making. It illustrates some
  2. interesting techniches, like AMAL BOBs animated with data banks and
  3. BOB grabs from Anim5's.  It won't run without the graphics though, but I
  4. suppose you could make some. Have Fun!
  5.  
  6. Goto HELL
  7. Procedure INIT_CRAP
  8.    SPIN_KICK=69
  9.    HIGH_KICK=16
  10.    MID_KICK=32
  11.    LOW_KICK=49
  12.    HIGH_PUNCH=17
  13.    MID_PUNCH=33
  14.    LOW_PUNCH=50
  15.    BOW=53
  16.    WALKING_LEFT=79
  17.    WALKING_LEFT_2=179
  18.    WALKING_RIGHT=78
  19.    WALKING_RIGHT_2=178
  20.    HURT=100
  21.    STANDING=101
  22.    SHUFFLE_LEFT=102
  23.    SHUFFLE_RIGHT=103
  24.    ABORT_WALK_LEFT=104
  25.    ABORT_WALK_RIGHT=105
  26.    DEAD=106
  27.    STILL_WALKING_RIGHT=57
  28.    STILL_WALKING_LEFT=56
  29.    WALK_PUNCH_HIGH=18
  30.    WALK_PUNCH_MID=34
  31.    WALK_PUNCH_LOW=51
  32.    WALK_KICK_HIGH=19
  33.    WALK_KICK_MID=35
  34.    WALK_KICK_LOW=52
  35.    FOOT_SWEEP=111
  36.    BLOCK=68
  37.    JUMP=666
  38. End Proc
  39. Procedure INIT_ENEMYPAT
  40. '   Bell 
  41.    For A=1 To 5
  42.     For B=1 To 5
  43.      Read A$
  44.      PATTERN$(A,B)=A$
  45. '     Print PATTERN$(A,B)
  46.     Next B
  47.    Next A
  48. Data "kh","sr","km","sl","ee"
  49. Data "kl","sl","ph","pm","ee"
  50. Data "km","kh","ks","sr","ee"
  51. Data "sr","sr","sr","sr","ee"
  52. Data "ks","sl","kl","ph","ee"
  53. A=0 : B=0
  54. End Proc
  55. Procedure INIT
  56.    Close Editor 
  57. '   Multi No 
  58.    Screen Open 2,320,200,64,Lowres
  59.    Screen Display 2,128,42,,
  60.    Curs Off : Cls 0 : Flash Off 
  61.    F$="wolfpics:"
  62.    Screen Open 0,350,232,64,Lowres
  63.    Screen Display 0,128,42,,
  64. '   Load F$+"karateka.abk" 
  65.    Get Icon Palette 
  66.    Flash Off : Curs Off 
  67. '   Scene Load F$+"karateka.Scene",6 
  68.    Scene Bank 6
  69.    Scene 16 View 0,0,0 To 320,232
  70.    Scene 16 Do X,Y
  71.    Double Buffer 
  72.    Bob Update Off 
  73.    Update Off 
  74.    Flash Off 
  75.    Curs Off 
  76.    Hide On 
  77.    Autoback 0
  78.    Paper 17
  79.    X_OFFSET=0
  80.    Y_OFFSET=0
  81.    Screen Open 1,320,60,8,Lowres
  82.    Screen Display 1,,200,,60
  83.    Curs Off : Cls 0 : Flash Off 
  84.    Screen 2
  85.    Get Icon Palette 
  86.    Screen 0
  87.    Key Speed 10,10
  88.    Reserve As Work 20,100
  89.    Reserve As Work 1001,2000
  90.    Reserve As Work 1002,2000
  91.    Poke Start(1001),0
  92.    Poke Start(1002),0
  93.    S=Start(20)
  94.    COUNT=0
  95.    INIT_MEN
  96.    INIT_CRAP
  97.    INIT_POSITIONS
  98.    INIT_ENEMYPAT
  99.    INIT_MOVES
  100.    INIT_STATUS
  101.    INIT_SOUNDS
  102. End Proc
  103. Procedure INIT_MEN
  104.    F$="wolfpics:"
  105. '   Load F$+"DetectMoves.Abk"
  106. '   Bank Swap 1,8
  107. '   Load F$+"KarateMoves3.Abk" 
  108.    IMAGE=28
  109.    X(1)=200 : Y(1)=100
  110.    X(2)=100 : Y(2)=100
  111.    Bob 1,X(1),Y(1),Hrev(IMAGE)
  112.    Bob 2,X(2),Y(2),IMAGE
  113.    STAND=False
  114.    LIVES1=1
  115.    LIVES2=1
  116.    For T=1 To 56
  117.       Hot Spot T,$11
  118.    Next T
  119.    ENEMY=1
  120.    HERO=2
  121.    Proc STATS
  122.    ENEMY_HIT_X=1000
  123.    ENEMY_HIT_Y=1000
  124.    HERO_HIT_X=1000
  125.    HERO_HIT_Y=1000
  126. End Proc
  127. Procedure INIT_POSITIONS
  128.    For P=1 To 5
  129.       Read L$
  130.       LOCATION$(P)=L$
  131.    Next P
  132.    Data "Head/Neck","Torso","Arms/Hands","Groin","Legs/Feet"
  133. End Proc
  134. Procedure INIT_MOVES
  135.  
  136. SPEED=12
  137. WALK_SPEED=5
  138. WALK_DIST=25
  139.  
  140. 'SPIN_KICK:
  141.    Reserve As Work SPIN_KICK,56
  142.    S=Start(SPIN_KICK)
  143.    Loke S,6
  144.    For T=4 To(13*4) Step 4
  145.       Read DAT
  146.       Loke S+T,DAT
  147.    Next T
  148.    Data 17,-18,-17,-18,3,6,SPEED
  149.    Data 4,5,6,7,8,9
  150. 'HIGH_KICK:
  151.    Reserve As Work HIGH_KICK,44
  152.    S=Start(HIGH_KICK)
  153.    Loke S,3
  154.    For T=4 To(10*4) Step 4
  155.       Read DAT
  156.       Loke S+T,DAT
  157.    Next T
  158.    Data 14,-10,-14,-10,1,11,SPEED
  159.    Data 10,11,14
  160. 'MID_KICK: 
  161.    Reserve As Work MID_KICK,44
  162.    S=Start(MID_KICK)
  163.    Loke S,3
  164.    For T=4 To(10*4) Step 4
  165.       Read DAT
  166.       Loke S+T,DAT
  167.    Next T
  168.    Data 16,0,-16,0,1,12,SPEED
  169.    Data 10,12,14
  170. 'LOW_KICK: 
  171.    Reserve As Work LOW_KICK,44
  172.    S=Start(LOW_KICK)
  173.    Loke S,3
  174.    For T=4 To(10*4) Step 4
  175.       Read DAT
  176.       Loke S+T,DAT
  177.    Next T
  178.    Data 8,14,-8,14,1,11,SPEED
  179.    Data 10,13,14
  180. 'HIGH_PUNCH: 
  181.    Reserve As Work HIGH_PUNCH,48
  182.    S=Start(HIGH_PUNCH)
  183.    Loke S,4
  184.    For T=4 To(11*4) Step 4
  185.       Read DAT
  186.       Loke S+T,DAT
  187.    Next T
  188.    Data 14,-15,-14,-15,1,21,SPEED
  189.    Data 20,21,22,23
  190. 'MID_PUNCH:
  191.    Reserve As Work MID_PUNCH,52
  192.    S=Start(MID_PUNCH)
  193.    Loke S,5
  194.    For T=4 To(12*4) Step 4
  195.       Read DAT
  196.       Loke S+T,DAT
  197.    Next T
  198.    Data 15,-5,-15,-5,1,16,SPEED
  199.    Data 15,16,17,18,19
  200. 'LOW_PUNCH:
  201.    Reserve As Work LOW_PUNCH,48
  202.    S=Start(LOW_PUNCH)
  203.    Loke S,4
  204.    For T=4 To(11*4) Step 4
  205.       Read DAT
  206.       Loke S+T,DAT
  207.    Next T
  208.    Data 12,0,-12,0,1,25,SPEED
  209.    Data 24,25,26,27
  210. 'STANDING: 
  211.    Reserve As Work STANDING,36
  212.    S=Start(STANDING)
  213.    Loke S,1
  214.    For T=4 To(8*4) Step 4
  215.       Read DAT
  216.       Loke S+T,DAT
  217.    Next T
  218.    Data 1000,1000,1000,1000,255,255,1
  219.    Data 28
  220. 'HURT: 
  221.    Reserve As Work HURT,36
  222.    S=Start(HURT)
  223.    Loke S,1
  224.    For T=4 To(8*4) Step 4
  225.       Read DAT
  226.       Loke S+T,DAT
  227.    Next T
  228.    Data 1000,1000,1000,1000,255,38,20
  229.    Data 38
  230. 'BOW:
  231.    Reserve As Work BOW,52
  232.    S=Start(BOW)
  233.    Loke S,5
  234.    For T=4 To(12*4) Step 4
  235.       Read DAT
  236.       Loke S+T,DAT
  237.    Next T
  238.    Data 1000,1000,1000,1000,3,0,SPEED
  239.    Data 1,2,3,2,1
  240. ' Walking Left 1 
  241.    Reserve As Work WALKING_LEFT,60
  242.    S=Start(WALKING_LEFT)
  243.    Loke S,3
  244.    For T=4 To(14*4) Step 4
  245.       Read DAT
  246.       Loke S+T,DAT
  247.    Next T
  248.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  249.    Data 34,56,33
  250.    Data -10,10,-10,10
  251. ' Walking Left 2 
  252.    Reserve As Work WALKING_LEFT_2,64
  253.    S=Start(WALKING_LEFT_2)
  254.    Loke S,4
  255.    For T=4 To(15*4) Step 4
  256.       Read DAT
  257.       Loke S+T,DAT
  258.    Next T
  259.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  260.    Data 32,31,30,29
  261.    Data -15,15,-15,15
  262. ' Walking Right 1  
  263.    Reserve As Work WALKING_RIGHT,60
  264.    S=Start(WALKING_RIGHT)
  265.    Loke S,3
  266.    For T=4 To(14*4) Step 4
  267.       Read DAT
  268.       Loke S+T,DAT
  269.    Next T
  270.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  271.    Data 29,30,31
  272.    Data 10,10,10,10
  273. ' Walking Right 2  
  274.    Reserve As Work WALKING_RIGHT_2,64
  275.    S=Start(WALKING_RIGHT_2)
  276.    Loke S,4
  277.    For T=4 To(15*4) Step 4
  278.       Read DAT
  279.       Loke S+T,DAT
  280.    Next T
  281.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  282.    Data 32,33,56,34
  283.    Data 15,15,15,15
  284. ' Shuffle Left 
  285.    Reserve As Work SHUFFLE_LEFT,60
  286.    S=Start(SHUFFLE_LEFT)
  287.    Loke S,3
  288.    For T=4 To(14*4) Step 4
  289.       Read DAT
  290.       Loke S+T,DAT
  291.    Next T
  292.    Data 1000,1000,1000,1000,0,0,SPEED
  293.    Data 36,37,36
  294.    Data -8,8,-8,8
  295. ' Shuffle Right
  296.    Reserve As Work SHUFFLE_RIGHT,60
  297.    S=Start(SHUFFLE_RIGHT)
  298.    Loke S,3
  299.    For T=4 To(14*4) Step 4
  300.       Read DAT
  301.       Loke S+T,DAT
  302.    Next T
  303.    Data 1000,1000,1000,1000,0,0,SPEED
  304.    Data 36,37,36
  305.    Data 8,8,8,8
  306. 'Abort Walk Left 
  307.    Reserve As Work ABORT_WALK_LEFT,60
  308.    S=Start(ABORT_WALK_LEFT)
  309.    Loke S,3
  310.    For T=4 To(14*4) Step 4
  311.       Read DAT
  312.       Loke S+T,DAT
  313.    Next T
  314.    Data 1000,1000,1000,1000,0,0,SPEED
  315.    Data 29,30,31
  316.    Data -10,10,-10,10
  317. 'Abort Walk Right  
  318.    Reserve As Work ABORT_WALK_RIGHT,60
  319.    S=Start(ABORT_WALK_RIGHT)
  320.    Loke S,3
  321.    For T=4 To(14*4) Step 4
  322.       Read DAT
  323.       Loke S+T,DAT
  324.    Next T
  325.    Data 1000,1000,1000,1000,0,0,SPEED
  326.    Data 31,30,29
  327.    Data 10,10,10,10
  328. 'Dead  
  329.    Reserve As Work DEAD,52
  330.    S=Start(DEAD)
  331.    Loke S,5
  332.    For T=4 To(12*4) Step 4
  333.       Read DAT
  334.       Loke S+T,DAT
  335.    Next T
  336.    Data 1000,1000,1000,1000,255,0,SPEED
  337.    Data 38,39,40,41,42
  338. ' Still Walking Left 
  339.    Reserve As Work STILL_WALKING_LEFT,76
  340.    S=Start(STILL_WALKING_LEFT)
  341.    Loke S,7
  342.    For T=4 To(18*4) Step 4
  343.       Read DAT
  344.       Loke S+T,DAT
  345.    Next T
  346.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  347.    Data 35,34,56,33,32,31,30
  348.    Data -30,30,30,30
  349. ' Still Walking Right  
  350.    Reserve As Work STILL_WALKING_RIGHT,76
  351.    S=Start(STILL_WALKING_RIGHT)
  352.    Loke S,7
  353.    For T=4 To(18*4) Step 4
  354.       Read DAT
  355.       Loke S+T,DAT
  356.    Next T
  357.    Data 1000,1000,1000,1000,0,0,WALK_SPEED
  358.    Data 30,31,32,33,56,34,35
  359.    Data 30,30,-30,30
  360. 'Walk Punch High 
  361.    Reserve As Work WALK_PUNCH_HIGH,76
  362.    S=Start(WALK_PUNCH_HIGH)
  363.    Loke S,7
  364.    For T=4 To(18*4) Step 4
  365.       Read DAT
  366.       Loke S+T,DAT
  367.    Next T
  368.    Data 14,-15,-14,-15,0,16,SPEED
  369.    Data 29,30,31,44,45,46,47
  370.    Data 15,15,-15,15
  371. 'Walk Punch Mid  
  372.    Reserve As Work WALK_PUNCH_MID,76
  373.    S=Start(WALK_PUNCH_MID)
  374.    Loke S,7
  375.    For T=4 To(18*4) Step 4
  376.       Read DAT
  377.       Loke S+T,DAT
  378.    Next T
  379.    Data 12,-5,-12,-5,0,16,SPEED
  380.    Data 29,30,31,50,51,52,47
  381.    Data 15,15,-15,15
  382. 'Walk Punch Low  
  383.    Reserve As Work WALK_PUNCH_LOW,76
  384.    S=Start(WALK_PUNCH_LOW)
  385.    Loke S,7
  386.    For T=4 To(18*4) Step 4
  387.       Read DAT
  388.       Loke S+T,DAT
  389.    Next T
  390.    Data 11,1,-11,1,0,16,SPEED
  391.    Data 29,30,31,53,54,55,47
  392.    Data 15,15,-15,15
  393. 'Walk Kick High  
  394.    Reserve As Work WALK_KICK_HIGH,68
  395.    S=Start(WALK_KICK_HIGH)
  396.    Loke S,5
  397.    For T=4 To(16*4) Step 4
  398.       Read DAT
  399.       Loke S+T,DAT
  400.    Next T
  401.    Data 14,-10,-14,-10,0,12,SPEED
  402.    Data 29,30,31,14,11
  403.    Data 15,15,-15,15
  404. 'Block 
  405. 'Walk Kick Mid   
  406.    Reserve As Work WALK_KICK_MID,68
  407.    S=Start(WALK_KICK_MID)
  408.    Loke S,5
  409.    For T=4 To(16*4) Step 4
  410.       Read DAT
  411.       Loke S+T,DAT
  412.    Next T
  413.    Data 16,0,-16,0,0,12,SPEED
  414.    Data 29,30,31,14,12
  415.    Data 15,15,-15,15
  416. 'Block 
  417. 'Walk Kick Low   
  418.    Reserve As Work WALK_KICK_LOW,68
  419.    S=Start(WALK_KICK_LOW)
  420.    Loke S,5
  421.    For T=4 To(16*4) Step 4
  422.       Read DAT
  423.       Loke S+T,DAT
  424.    Next T
  425.    Data 8,14,-8,14,0,12,SPEED
  426.    Data 29,30,31,14,13
  427.    Data 15,15,-15,15
  428. 'Block 
  429.    Reserve As Work BLOCK,36
  430.    S=Start(BLOCK)
  431.    Loke S,1
  432.    For T=4 To(8*4) Step 4
  433.       Read DAT
  434.       Loke S+T,DAT
  435.    Next T
  436.    Data 1000,1000,1000,1000,1,46,SPEED
  437.    Data 46
  438.  
  439. ' form of banks is   
  440. ' 0 anim length
  441. ' 1,2 hero hit x,y or if walking the hero direction & distance 
  442. ' 3,4 enemy hit x,y or if walking the enemy direction & distance 
  443. ' 5 move counter 
  444. ' 6 detect frame 
  445. ' 7 anim speed 
  446. ' 8  to 8+anim length : anim data  
  447.  
  448. End Proc
  449. Procedure INIT_STATUS
  450.    Reserve As Work 2001,100
  451.    Reserve As Work 2002,100
  452.  
  453.    ' 0,1 x,y pos
  454.    ' 2 walking
  455.    ' 3 move # 
  456.    ' 4 damage 
  457.    ' 5,6 hit x,y
  458.    ' 7 hit
  459.    ' 8 Anim Frame 
  460.    ' 9 missed 
  461.    ' 10 Jumping 
  462.  
  463.    S1=Start(2001)
  464.    S2=Start(2002)
  465.  
  466.    ' Enemy
  467.    Poke S1,200
  468.    Poke S1+1,100
  469.    Poke S1+2,0
  470.    Poke S1+3,0
  471.    Poke S1+4,100
  472.    Poke S1+5,255
  473.    Poke S1+6,255
  474.    Poke S1+7,0
  475.    Poke S1+8,28
  476.    Poke S1+9,0
  477.    Poke S1+10,0
  478.  
  479.    ' Hero 
  480.    Poke S2,100
  481.    Poke S2+1,100
  482.    Poke S2+2,0
  483.    Poke S2+3,0
  484.    Poke S2+4,100
  485.    Poke S2+5,255
  486.    Poke S2+6,255
  487.    Poke S2+7,0
  488.    Poke S2+8,28
  489.    Poke S2+9,0
  490.    Poke S2+10,0
  491. End Proc
  492. Procedure INIT_SOUNDS
  493.    Load "wolf:sounds.abk",5
  494.    Sam Bank 5
  495.    S_PUNCH=1
  496.    S_KICK=2
  497.    S_KNOCKDOWN=3
  498.    S_2HIT=4
  499.    S_BIG2HIT=5
  500.    S_BIGHIT=6
  501.    S_MISS=7
  502.    SOUNDS=True
  503. End Proc
  504. Procedure RENEW_AMREG
  505.    Poke Start(2001)+8,Amreg(0)
  506.    Poke Start(2002)+8,Amreg(1)
  507.    Screen 1
  508.    Locate 1,1
  509.    Cline 
  510.    Print Peek(Start(2002)+8)
  511.    Screen 0
  512. End Proc
  513. Procedure MAIN
  514.    TWO_PLAYER=True
  515.    INIT
  516.    Repeat 
  517.       While Chanan(2) or Chanan(1)
  518.          If Chanan(2)=False Then Proc _CHECK_MAN[2]
  519.          If Chanan(1)=False
  520.             If TWO_PLAYER
  521.                Proc _CHECK_MAN[ENEMY]
  522.             Else 
  523.                Proc ENEMY_AI[1]
  524.             End If 
  525.          End If 
  526.          Proc SOUND[1]
  527.          Proc SOUND[2]
  528.          Proc STICK_CHECK
  529.          Proc RENEW_AMREG
  530.          Proc _DO_SCREEN_UPDATE
  531.       Wend 
  532.       Proc _CHECK_MAN[2]
  533.       If TWO_PLAYER
  534.          Proc _CHECK_MAN[1]
  535.       Else 
  536.          Proc ENEMY_AI[ENEMY]
  537.       End If 
  538.       Proc RENEW_AMREG
  539.       Proc SOUND[1]
  540.       Proc SOUND[2]
  541.       Proc _DO_SCREEN_UPDATE
  542.    Until Left Click : Rem MONKEYS_FLY_OUT_OF_MY_ASS
  543.    PROGRAM_END
  544. End Proc
  545. Procedure PROGRAM_END
  546. '   Erase 1
  547. '   Erase 2
  548. '   Erase 6
  549. '   Multi Yes  
  550.    Edit 
  551. End Proc
  552. Procedure _CHECK_MAN[MAN]
  553.    MOVE=Joy(MAN-1)
  554.    If MOVE=0
  555.       K$=Inkey$
  556.       MOVE=Scancode
  557.    Else 
  558.       ' Convert Joystick codes into key codes for use as bank pointers 
  559.       If MOVE=4 : MOVE=WALKING_RIGHT : End If 
  560.       If MOVE=8 : MOVE=WALKING_LEFT : End If 
  561.       If MOVE=2 : Poke Start(2000+MAN),1 : End If 
  562.       If MOVE=1 : MOVE=SPIN_KICK : End If 
  563.       If MOVE=25 : MOVE=HIGH_KICK : End If 
  564.       If MOVE=24 : MOVE=MID_KICK : End If 
  565.       If MOVE=26 : MOVE=LOW_KICK : End If 
  566.       If MOVE=21 : MOVE=HIGH_PUNCH : End If 
  567.       If MOVE=20 : MOVE=MID_PUNCH : End If 
  568.       If MOVE=22 : MOVE=LOW_PUNCH : End If 
  569.    End If 
  570.    LAST_MOVE=Peek(Start(2000+MAN)+3)
  571.    If MOVE<>0 and Chanan(MAN)=False
  572.       ' Determine walking direction and shuffling or walking 
  573.       If MOVE=WALKING_LEFT
  574.          If LAST_MOVE=STANDING
  575.             If MAN=1 : MOVE=SHUFFLE_RIGHT : Else :
  576. MOVE=SHUFFLE_LEFT : End If 
  577.          Else 
  578.             If MAN=1 : MOVE=WALKING_RIGHT : Else :
  579. MOVE=WALKING_LEFT : End If 
  580.          End If 
  581.          If LAST_MOVE=WALKING_LEFT : MOVE=WALKING_LEFT_2 : End
  582. If 
  583.       End If 
  584.       If MOVE=WALKING_RIGHT
  585.          If LAST_MOVE=STANDING
  586.             If MAN=1 : MOVE=SHUFFLE_LEFT : Else :
  587. MOVE=SHUFFLE_RIGHT : End If 
  588.          Else 
  589.             If MAN=1 : MOVE=WALKING_LEFT : Else :
  590. MOVE=WALKING_RIGHT : End If 
  591.          End If 
  592.          If LAST_MOVE=WALKING_RIGHT : MOVE=WALKING_RIGHT_2 :
  593. End If 
  594.       End If 
  595.       ' Determine walk punch and walk kick 
  596.       If LAST_MOVE=WALKING_LEFT or LAST_MOVE=WALKING_RIGHT
  597.          If MOVE=PUNCH_HIGH : MOVE=WALK_PUNCH_HIGH : End If 
  598.          If MOVE=PUNCH_MID : MOVE=WALK_PUNCH_MID : End If 
  599.          If MOVE=PUNCH_LOW : MOVE=WALK_PUNCH_LOW : End If 
  600.          If MOVE=KICK_HIGH : MOVE=WALK_KICK_HIGH : End If 
  601.          If MOVE=KICK_MID : MOVE=WALK_KICK_MID : End If 
  602.          If MOVE=KICK_LOW : MOVE=WALK_KICK_LOW : End If 
  603.       End If 
  604.    End If 
  605.    If MAN=2 Then ENEMY_REPORT[MOVE]
  606.    Proc STICK_STRIKE[MAN,MOVE]
  607.    Clear Key 
  608. End Proc
  609. Procedure _DEBUG
  610.    Screen 1
  611.    Locate 0,1
  612.    Cline 20
  613.    Print "Enemy= ",ENEMY_STATUS$," Hero= ",HERO_STATUS$
  614.    Locate 0,2
  615.    Cline 20
  616.    Print "Dist:";DISTANCE
  617.    Locate 0,4
  618.    Cline 10
  619.    Print "X=";ENEMY_HIT_X;"Y=";ENEMY_HIT_Y
  620.    Screen 0
  621. End Proc
  622. Procedure STICK_CHECK
  623.    DISTANCE=X Bob(1)-X Bob(2)
  624.    If Bob Col(1)
  625.       If ENEMY_STATUS$="WALKING" and DISTANCE<5
  626.          STICK_STRIKE[1,ABORT_WALK_LEFT]
  627.       Else 
  628.          MOVE=Peek(Start(2001)+3) : Rem     find then move the man is in 
  629.          L1=Leek(Start(MOVE)+(6*4)) : Rem   find the detect frame of that
  630. move 
  631.          L2=Peek(Start(2001)+8) : Rem       find the anim frame you are on 
  632.          PATTERN_REPORT[L1,L2]
  633.          If L1=L2 : Rem                     if anim frame = detect frame then
  634.             Proc STICK_HIT[2]
  635.          End If 
  636.       End If 
  637.    End If 
  638.    If Bob Col(2)
  639.       If HERO_STATUS$="WALKING" and DISTANCE<5
  640.          STICK_STRIKE[2,ABORT_WALK_LEFT]
  641.       Else 
  642.          MOVE=Peek(Start(2002)+3)
  643.          L1=Leek(Start(MOVE)+(6*4))
  644.          L2=Peek(Start(2002)+8)
  645.          PATTERN_REPORT[L1,L2]
  646.          If L1=L2
  647.             Proc STICK_HIT[1]
  648.          End If 
  649.       End If 
  650.    End If 
  651. End Proc
  652. Procedure STICK_HIT[MAN]
  653.    HUE=0
  654.    Screen 2
  655.    If MAN=1 : Rem * The Hero Hits!"
  656.       If HERO_HIT_X=1000 : Screen 0 : Pop Proc : End If 
  657.       Bank Swap 8,1
  658.       FRAME=Peek(Start(2001)+8)
  659.       FLIPPED=32
  660.       WHY=26
  661.       Paste Bob X Bob(1)-FLIPPED,Y Bob(1)-WHY,Hrev(FRAME)
  662.       For T=1 To 5
  663.          Screen 2
  664.          If T=1 : HUE=Point(X Bob(2)+HERO_HIT_X,Y Bob(2)+HERO_HIT_Y) :
  665. End If 
  666.          If T=2 : HUE=Point(X Bob(2)+HERO_HIT_X+1,Y
  667. Bob(2)+HERO_HIT_Y-2) : End If 
  668.          If T=3 : HUE=Point(X Bob(2)+HERO_HIT_X+1,Y
  669. Bob(2)+HERO_HIT_Y+2) : End If 
  670.          If T=4 : HUE=Point(X Bob(2)+HERO_HIT_X-1,Y
  671. Bob(2)+HERO_HIT_Y-1) : End If 
  672.          If T=5 : HUE=Point(X Bob(2)+HERO_HIT_X-1,Y
  673. Bob(2)+HERO_HIT_Y+1) : End If 
  674.          If HUE<>0 : DAMAGED[1,HUE] : T=6 : End If 
  675.       Next T
  676.       If HUE=0 : Poke Start(2001)+9,1 : End If 
  677.       HERO_HIT_X=1000 : HERO_HIT_Y=1000
  678.       Screen 2 : Rem * Dont ask me why I have to do this! AMOS seems to
  679. forget
  680.       Cls 0 : Rem    * that I was already on Screen 2 and clears Screen 0!?
  681.       Bank Swap 1,8
  682.    End If 
  683.    If MAN=2 : Rem *  The Enemy Strikes!
  684.       If ENEMY_HIT_X=1000 : Screen 0 : Pop Proc : End If 
  685.       Bank Swap 8,1
  686.       FRAME=Peek(Start(2002)+8)
  687.       FLIPPED=32
  688.       WHY=26
  689.       Paste Bob X Bob(2)-FLIPPED,Y Bob(2)-WHY,FRAME
  690.       For T=1 To 5
  691.          Screen 2
  692.          If T=1 : HUE=Point(X Bob(1)+ENEMY_HIT_X,Y
  693. Bob(1)+ENEMY_HIT_Y) : End If 
  694.          If T=2 : HUE=Point(X Bob(1)+ENEMY_HIT_X+1,Y
  695. Bob(1)+ENEMY_HIT_Y-2) : End If 
  696.          If T=3 : HUE=Point(X Bob(1)+ENEMY_HIT_X+1,Y
  697. Bob(1)+ENEMY_HIT_Y+2) : End If 
  698.          If T=4 : HUE=Point(X Bob(1)+ENEMY_HIT_X-1,Y
  699. Bob(1)+ENEMY_HIT_Y-1) : End If 
  700.          If T=5 : HUE=Point(X Bob(1)+ENEMY_HIT_X-1,Y
  701. Bob(1)+ENEMY_HIT_Y+1) : End If 
  702.          If HUE<>0 : DAMAGED[2,HUE] : T=6 : End If 
  703.       Next T
  704.       If HUE=0 : Poke Start(2002)+9,1 : End If 
  705.       ENEMY_HIT_X=1000 : ENEMY_HIT_Y=1000
  706.       Screen 2
  707.       Bank Swap 1,8
  708.       Cls 0
  709.    End If 
  710.    Screen 0
  711. End Proc
  712. Procedure SOUND[MAN]
  713.    S1=Start(2001)
  714.    S2=Start(2002)
  715.    If MAN=1
  716.       MOVE=Peek(S2+3)
  717.       If MOVE=17 or MOVE=33 or MOVE=50 or MOVE=18 or MOVE=31 or
  718. MOVE=51
  719.          If Peek(S1+6)>0
  720.             Sam Play S_PUNCH
  721.             Poke S1+6,0
  722.          End If 
  723.          If Peek(S1+9)=1
  724. '            Sam Play S_MISS 
  725.             Poke S1+9,0
  726.          End If 
  727.       End If 
  728.       If MOVE=69 or MOVE=16 or MOVE=32 or MOVE=49 or MOVE=19 or
  729. MOVE=35 or MOVE=52
  730.          If Peek(S1+6)>0
  731.             Sam Play S_KICK
  732.             Poke S1+6,0
  733.          End If 
  734.          If Peek(S1+9)=1
  735. '            Sam Play S_MISS 
  736.             Poke S1+9,0
  737.          End If 
  738.       End If 
  739.    Else 
  740.       MOVE=Peek(S1+3)
  741.       If MOVE=17 or MOVE=33 or MOVE=50 or MOVE=18 or MOVE=31 or
  742. MOVE=51
  743.          If Peek(S2+6)>0
  744.             Sam Play S_PUNCH
  745.             Poke S2+6,0
  746.          End If 
  747.          If Peek(S2+9)=1
  748. '            Sam Play S_MISS 
  749.          End If 
  750.       End If 
  751.       If MOVE=69 or MOVE=16 or MOVE=32 or MOVE=49 or MOVE=19 or
  752. MOVE=35 or MOVE=52
  753.          If Peek(S2+6)>0
  754.             Sam Play S_KICK
  755.             Poke S2+6,0
  756.          End If 
  757.          If Peek(S2+9)=1
  758. '            Sam Play S_MISS 
  759.          End If 
  760.       End If 
  761.    End If 
  762. End Proc
  763. Procedure STICK_STRIKE[MAN,MOVE]
  764.    If MOVE=0 : M=STANDING : OTHER$="STANDING" : End If 
  765.    If MOVE=79 : M=WALKING_LEFT : OTHER$="WALKING" : End If 
  766.    If MOVE=78 : M=WALKING_RIGHT : OTHER$="WALKING" : End If 
  767.    If MOVE=179 : M=WALKING_LEFT_2 : OTHER$="WALKING" : End If 
  768.    If MOVE=178 : M=WALKING_RIGHT_2 : OTHER$="WALKING" : End If 
  769.    If MOVE=53 : M=BOW : OTHER$="BOW" : End If 
  770.    If MOVE=69 Then M=SPIN_KICK
  771.    If MOVE=16 Then M=HIGH_KICK
  772.    If MOVE=32 Then M=MID_KICK
  773.    If MOVE=49 Then M=LOW_KICK
  774.    If MOVE=17 Then M=HIGH_PUNCH
  775.    If MOVE=33 Then M=MID_PUNCH
  776.    If MOVE=50 Then M=LOW_PUNCH
  777.    If MOVE=100 : OTHER$="HURT" : M=HURT : End If 
  778.    If MOVE=102 : M=SHUFFLE_LEFT : OTHER$="WALKING" : End If 
  779.    If MOVE=103 : M=SHUFFLE_RIGHT : OTHER$="WALKING" : End If 
  780.    If MOVE=104 : M=ABORT_WALK_LEFT : OTHER$="WALKING" : End If 
  781.    If MOVE=105 : M=ABORT_WALK_RIGHT : OTHER$="WALKING" : End If
  782.  
  783.    If MOVE=106 Then M=DEAD
  784.    If MOVE=56 : M=STILL_WALKING_LEFT : OTHER$="WALKING" : End If 
  785.    If MOVE=57 : M=STILL_WALKING_RIGHT : OTHER$="WALKING" : End If
  786.  
  787.    If MOVE=18 Then M=WALK_PUNCH_HIGH
  788.    If MOVE=34 Then M=WALK_PUNCH_MID
  789.    If MOVE=51 Then M=WALK_PUNCH_LOW
  790.    If MOVE=19 Then M=WALK_KICK_HIGH
  791.    If MOVE=35 Then M=WALK_KICK_MID
  792.    If MOVE=52 Then M=WALK_KICK_LOW
  793.    If MOVE=68 Then M=BLOCK
  794.    If M=0 Then M=STANDING
  795.  
  796.    ' Preceding section exists almost solely to prevent errant keypresses
  797.    ' from crashing the program. Idealy MOVE would just be passed the
  798. Go_Anim  
  799.  
  800.    If M<>STANDING and M<>0
  801.       S=Start(MAN+1000)
  802.       If COUNT>1999 : COUNT=0 : End If 
  803.       Inc COUNT
  804.       Poke S+COUNT,M
  805.    End If 
  806.  
  807.    S=Start(M)
  808.    If MAN=2
  809.       If Leek(Start(1001)+(6*4))=46
  810.          HERO_HIT_X=1000
  811.          HERO_HIT_Y=1000
  812.       Else 
  813.          HERO_HIT_X=Leek(S+(1*4))
  814.          HERO_HIT_Y=Leek(S+(2*4))
  815.       End If 
  816.       If OTHER$=""
  817.          HERO_STATUS$="STRIKE"
  818.       Else 
  819.          HERO_STATUS$=OTHER$
  820.       End If 
  821.    Else 
  822.       If Leek(Start(1002)+(6*4))=46
  823.          ENEMY_HIT_X=1000
  824.          ENEMY_HIT_Y=1000
  825.       Else 
  826.          ENEMY_HIT_X=Leek(S+(3*4))
  827.          ENEMY_HIT_Y=Leek(S+(4*4))
  828.       End If 
  829.       If OTHER$=""
  830.          ENEMY_STATUS$="STRIKE"
  831.       Else 
  832.          ENEMY_STATUS$=OTHER$
  833.       End If 
  834.    End If 
  835.    S=Start(2000+MAN)
  836.    Poke S+3,M
  837.    Proc GO_ANIM[MAN,M]
  838. End Proc
  839. Procedure ENEMY_AI[MAN]
  840.    DISTANCE=X Bob(1)-X Bob(2)
  841.    DIST=Abs(DISTANCE)
  842.    If DIST<120 and DIST>=30 and DISTANCE>0 Then
  843. MOVE=WALKING_RIGHT
  844.    If DIST<30 and A=0
  845.       A=Rnd(4)+1
  846.       B=0
  847.    End If 
  848.    If DIST<30 and A<>0 and Chanan(1)=0
  849.       B=Range(B+1,1 To 5)
  850.       If PATTERN$(A,B)="ks" : MOVE=SPIN_KICK : End If 
  851.       If PATTERN$(A,B)="kl" : MOVE=LOW_KICK : End If 
  852.       If PATTERN$(A,B)="km" : MOVE=MID_KICK : End If 
  853.       If PATTERN$(A,B)="kh" : MOVE=HIGH_KICK : End If 
  854.       If PATTERN$(A,B)="pl" : MOVE=LOW_PUNCH : End If 
  855.       If PATTERN$(A,B)="pm" : MOVE=MID_PUNCH : End If 
  856.       If PATTERN$(A,B)="ph" : MOVE=HIGH_PUNCH : End If 
  857.       If PATTERN$(A,B)="sl" : MOVE=SHUFFLE_LEFT : End If 
  858.       If PATTERN$(A,B)="sr" : MOVE=SHUFFLE_RIGHT : End If 
  859.       If PATTERN$(A,B)="ee" : A=0 : End If 
  860.    End If 
  861.    If Chanan(1)=False Then STICK_STRIKE[1,MOVE]
  862. End Proc
  863. Procedure PATTERN_REPORT[A1,B1]
  864.    Screen 1
  865.    Locate 15,3
  866.    Cline 15
  867.    Print "Pattern:",A1,B1
  868.    Screen 0
  869. End Proc
  870. Procedure ENEMY_REPORT[MOVE]
  871.    Screen 1
  872.    Locate 0,0
  873.    Cline 5
  874.    Print MOVE
  875.    Screen 0
  876. End Proc
  877. Procedure STATS
  878.    HERO_HEALTH=100
  879.    ENEMY_HEALTH=100
  880. End Proc
  881. Procedure REPORT_STATS
  882.    Screen 1
  883.    Locate 0,3
  884.    Cline 15
  885.    Print HERO_HEALTH,ENEMY_HEALTH;
  886.    Screen 0
  887. End Proc
  888. Procedure GOTCHA[MAN]
  889.    Screen 0
  890.    If MAN=2
  891.       Channel 3 To Bob 3
  892.       Bob 3,X Bob(1)+ENEMY_HIT_X,Y Bob(1)+ENEMY_HIT_Y,48
  893.       A$="Anim 1,(48,20)"
  894.       Amal 3,A$
  895.       Amal On 3
  896.    Else 
  897.       Channel 4 To Bob 4
  898.       Bob 4,X Bob(2)+HERO_HIT_X,Y Bob(2)+HERO_HIT_Y,49
  899.       A$="Anim 1,(49,20)"
  900.       Amal 4,A$
  901.       Amal On 4
  902.    End If 
  903. End Proc
  904. Procedure DAMAGED[MAN,LOCATION]
  905.    If LOCATION=1 Then OUCH=Rnd(10)+10
  906.    If LOCATION=2 Then OUCH=Rnd(10)+5
  907.    If LOCATION=3 Then OUCH=1
  908.    If LOCATION=4 Then OUCH=Rnd(10)+8
  909.    If LOCATION=5 Then OUCH=Rnd(5)+2
  910.    If LOCATION>5 Then OUCH=Rnd(10)+2
  911.    S=Start(HURT)
  912.    BOOY=Range(OUCH,10 To 20)
  913.    Loke S+7,BOOY
  914.    Poke Start(2000+MAN)+6,1
  915.    Proc STICK_STRIKE[MAN,HURT]
  916.    If MAN=2 Then Add HERO_HEALTH,-OUCH
  917.    If MAN=1 Then Add ENEMY_HEALTH,-OUCH
  918.    Proc REPORT_STATS
  919.    If HERO_HEALTH<=0 Then Proc DIE[2]
  920.    If ENEMY_HEALTH<=0 Then Proc DIE[1]
  921.    Poke Start(2002)+4,HERO_HEALTH
  922.    Poke Start(2001)+4,ENEMY_HEALTH
  923. End Proc
  924. Procedure DIE[MAN]
  925.    Bank Swap 8,1
  926.    If MAN=2 Then QUOTE$="Our Hero is Vanguished"
  927.    If MAN=1 Then QUOTE$="Our Hero Wins!"
  928.    STICK_STRIKE[MAN,DEAD]
  929.    Sam Play S_KNOCKDOWN
  930.    Screen 1
  931.    Locate 0,4
  932.    Cline 
  933.    Print QUOTE$;
  934.    Screen 0
  935.    While Chanan(1) or Chanan(2)
  936.       _DO_SCREEN_UPDATE
  937.    Wend 
  938.    Wait Key 
  939.    PROGRAM_END
  940. End Proc
  941. Procedure GO_ANIM[MAN,MOVE]
  942.    Channel MAN To Bob MAN
  943.    If MAN=1 Then F$="$8000+" Else F$=""
  944.    A$="Anim 1,"
  945.    S=Start(MOVE)
  946.    S$=Str$(Leek(S+(7*4)))
  947.    For T=(8*4) To(8*4)+(Leek(S)-1)*4 Step 4
  948.       A$=A$+"("+F$+Str$(Leek(S+T))+","+S$+")"
  949.    Next T
  950.    If Leek(S+(5*4))=0
  951.       F$=Str$(Leek(S+(Leek(S)+(8+(MAN*2)-2))*4))
  952.       G$=Str$(Leek(S+(Leek(S)+(9+(MAN*2)-2))*4))
  953.       A$=A$+"; M "+F$+",0,"+G$
  954.    End If 
  955.    If Peek(Start(2000+MAN)+10)=1
  956.       If MAN=1 : A$=A$+"; M -8,-15,10; M -8,15,10" : End If 
  957.       If MAN=2 : A$=A$+"; M 8,-15,10; M 8,15,10" : End If 
  958.    End If 
  959.    If MAN=1 Then A$=A$+"; K: Let RA=A Jump K" Else A$=A$+";K: Let
  960. RB=A Jump K"
  961.    Amal MAN,A$
  962.    Amal On MAN
  963. End Proc
  964. Procedure CAPTURE_ANIM[FILENAME$]
  965.    Screen Open 0,320,200,64,Lowres
  966.    F$="dh2:amos_pro/wolf/pictures/"
  967.    Open In 1,F$+FILENAME$
  968.    MEMORY=Frame Length(1,999)
  969.    NOF=Frame Load(1 To 10,999)
  970.    Close 1
  971.    FLAG=Frame Play(10,1,0)
  972.    Double Buffer 
  973.    For T=2 To NOF
  974.       FLAG=Frame Play(FLAG,1)
  975.       Screen Swap 
  976.       Wait Frame Param+1
  977.       Get Bob 0,T-1,145,63 To 206,116
  978.    Next T
  979.    End 
  980. End Proc
  981. Procedure _DO_SCREEN_UPDATE
  982.    Bob Draw 
  983.    Screen Swap 
  984.    Wait Vbl 
  985.    Bob Clear 
  986. End Proc
  987.  
  988. HELL:
  989.  
  990. Dim X(2),Y(2),LOCATION$(5),AREA_X(12),AREA_Y(12),PATTERN$(6,6)
  991.  
  992. Global PATTERN$(),A,B,DISTANCE
  993. Global X(),Y(),F$,LOCATION$(),AREA_X(),AREA_Y()
  994. Global IMAGE,X_OFFSET,LIVES1,LIVES2,WALKING
  995. Global ENEMY,PUNCH_COUNTER,KICK_COUNTER,SHUFFLE_COUNTER
  996. Global ENEMY_HEALTH,HERO_HEALTH,HERO_MOVES,ENEMY_MOVES
  997. Global HERO_STATUS$,ENEMY_STATUS$,ENEMY_HIT_X,ENEMY_HIT_Y
  998. Global HERO_HIT_X,HERO_HIT_Y,HERO,ENEMY,S,COUNT
  999.  
  1000. Global
  1001. SPIN_KICK,HIGH_KICK,MID_KICK,LOW_KICK,HIGH_PUNCH,MID_PUNCH,LOW_PUNCH
  1002. Global
  1003. BOW,STANDING,HURT,WALKING_LEFT,WALKING_RIGHT,SHUFFLE_LEFT,SHUFFLE_RIGHT
  1004. Global
  1005. DEAD,ABORT_WALK_LEFT,ABORT_WALK_RIGHT,STILL_WALKING_LEFT
  1006. Global
  1007. STILL_WALKING_RIGHT,WALK_PUNCH_HIGH,WALK_PUNCH_MID,WALK_PUNCH_LOW
  1008. Global
  1009. WALK_KICK_HIGH,WALK_KICK_MID,WALK_KICK_LOW,FOOT_SWEEP,BLOCK
  1010. Global WALKING_LEFT_2,WALKING_RIGHT_2,JUMP
  1011.  
  1012. Global
  1013. SOUNDS,S_PUNCH,S_KICK,S_KNOCKDOWN,S_2HIT,S_BIG2HIT,S_BIGHIT,S_MISS
  1014. Global S_COUNT
  1015.  
  1016. 'Proc CAPTURE_ANIM["detect.anim"]
  1017. Proc MAIN
  1018.  
  1019.  
  1020.  
  1021.